package com.blog.cmrpersonalblog.dto.tag.requset;

import com.blog.cmrpersonalblog.common.BasePageRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 标签查询请求
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class TagQueryRequest extends BasePageRequest {

    /**
     * 标签名称（模糊查询）
     */
    private String name;

    /**
     * 标签状态 0-禁用 1-启用
     */
    private Integer status;

    /**
     * 标签颜色
     */
    private String color;

    /**
     * 最小使用次数
     */
    private Integer minUseCount;

    /**
     * 最大使用次数
     */
    private Integer maxUseCount;

    /**
     * 使用频率等级 0-未使用 1-低频 2-中频 3-高频
     */
    private Integer usageLevel;

    /**
     * 开始时间
     */
    private String startTime;

    /**
     * 结束时间
     */
    private String endTime;

    /**
     * 是否包含使用统计信息
     */
    private Boolean includeUsageStats = false;

    /**
     * 构造函数，设置默认排序
     */
    public TagQueryRequest() {
        super();
        setDefaultSort("id", "asc");
    }

    /**
     * 验证排序字段是否有效
     */
    public boolean isValidSortField() {
        String field = getSortField();
        if (field == null) {
            return false;
        }
        return field.equals("use_count") || 
               field.equals("name") || 
               field.equals("create_time") || 
               field.equals("update_time") ||
               field.equals("id");
    }

    /**
     * 获取安全的排序字段
     */
    public String getSafeSortField() {
        return isValidSortField() ? getSortField() : "id";
    }

    /**
     * 验证使用频率等级是否有效
     */
    public boolean isValidUsageLevel() {
        return usageLevel != null && usageLevel >= 0 && usageLevel <= 3;
    }

    /**
     * 验证使用次数范围是否有效
     */
    public boolean isValidUseCountRange() {
        if (minUseCount != null && minUseCount < 0) {
            return false;
        }
        if (maxUseCount != null && maxUseCount < 0) {
            return false;
        }
        if (minUseCount != null && maxUseCount != null && minUseCount > maxUseCount) {
            return false;
        }
        return true;
    }

    /**
     * 获取安全的最小使用次数
     */
    public Integer getSafeMinUseCount() {
        return (minUseCount != null && minUseCount >= 0) ? minUseCount : null;
    }

    /**
     * 获取安全的最大使用次数
     */
    public Integer getSafeMaxUseCount() {
        return (maxUseCount != null && maxUseCount >= 0) ? maxUseCount : null;
    }
}
